/**
* ajax请求工具类
*/
var AjaxUtils = {
		/**
		 * 提示错误
		 * @param msg
		 */
		showError: function(msg,fn){
			if(Ext.isEmpty(msg)){
				msg = "操作异常";
			}

			Ext.Msg.show({
			     title: "操作异常提示",
			     msg: msg,
			     buttons: Ext.MessageBox.OK,
			     fn: fn,
			     icon: Ext.MessageBox.ERROR
			});
		},
		/**
		 * 提示成功
		 * @param msg
		 */
		showInfo: function(msg,fn){
			if(Ext.isEmpty(msg)){
				msg = "操作成功";
			}

			Ext.Msg.show({
			     title: "系统提示",
			     msg: msg,
			     buttons: Ext.MessageBox.OK,
			     fn: fn,
			     icon: Ext.MessageBox.INFO
			});
		},
		//显示提示框
		showProgress: function(title){
			if(Ext.isEmpty(title)){
				title = '正在加载，请稍后......';
			}
			Ext.Msg.show({
			     title: title,
			     msg: '<img src="'+CONTEXT.contextPath+'/assets/plug-in/images/progressBar.gif" style="width:100%;"/>'
			});
		},
		/**
		 * 系统确认提示
		 */
		showConfirm: function(fn,message,fnNo){
			Ext.Msg.confirm("系统确认提示",message || "确定需要执行该操作?",function(btn){
				if(btn == "yes"){
					if(Ext.isFunction(fn)){
						Ext.callback(fn);
                    }
				}else{
					if(Ext.isFunction(fnNo)){
						Ext.callback(fnNo);
                    }
				}
			});
		},
		/**
		 * 自定义BKFM个性化提示确认框
		 * @param buttons 自定义按钮数组,设置按钮
		 * @param fnOk 确定按钮会掉事件，在buttons不存在的情况生效
		 * @param fnNo 确定按钮会掉事件，在buttons不存在的情况生效
		 */
		showBkfmConfirm: function(message,buttons,fnOk,fnNo){
			Ext.create('Ext.com.bkfm.window', {
				title : "系统提示",
				autoScroll : true,
				modal : true,
				height : Utils.getHeight()*0.2,
				width : Utils.getWidth()*0.3,
				bodyStyle:"border:0px;",
				html: '<div style="padding:10px;width:100%;height:100%;"><div class="x-component  x-component-default x-dlg-icon x-message-box-question" style="width: 50px; height: 35px;float:left;"></div><div style="float:left;">'+message+'</div></div>',
				buttons: buttons || [{
					text: '确定',
					iconCls: 'ok',
					handler: function(self){
						var win = self.ownerCt.ownerCt;
						if(Ext.isFunction(fnOk)){
							Ext.callback(fnOk,this,[win]);
	                    }
						win.close();
					}
				},{
					text: '取消',
					iconCls: 'close',
					handler: function(self){
						var win = self.ownerCt.ownerCt;
						if(Ext.isFunction(fnNo)){
							Ext.callback(fnNo,this,[win]);
	                    }
						win.close();
					}
				}]
			}).show();
		},
		//关闭提示框
		closeProgress: function(){
			if(!Ext.Msg.isHidden()){
				//判断消息提示框已经打开，则允许关闭
				Ext.Msg.close();
			}
		},
		//ajax同步请求,json数据返回值
		CallJsonService: function(options){
			//请求参数定义
			var opts={
					url: "",
					params:null,
					method: "post",
					headers: null,
					call: Ext.emptyFn
			}
			//请求
			Ext.apply(opts,options);
			//this.showProgress();
			Ext.Ajax.request({
				async : false,
				url: opts.url,
                headers: opts.headers,
                params: opts.params,
                method: opts.method,
                success: function (response, options) {
                	//AjaxUtils.closeProgress();
                	var data = Ext.decode(response.responseText);
                	if(data.status == "SESSION_TIMEOUT"){
                		top.AjaxUtils.showError('系统登陆超时，请重新登陆',function(){
                			window.parent.location.href = CONTEXT.contextPath+"/login";
                		});
                		return;
                	}
                    if(opts.call){
                    	opts.call(data);
                    }

                },
                failure: function (response, options) {
                	if(response == null){
                		AjaxUtils.showError('出错了！请检查网络状态！');
		        	}else if(response.status == 0){
		        		AjaxUtils.showError('出错了！请求服务器无响应！');
		        	}else if(response.status == 404){
		        		AjaxUtils.showError('出错了！请求地址不存在！');
		        	}else if(response.status == 500){
		        		AjaxUtils.showError('出错了！请求数据异常！');
		        	}else{
		        		AjaxUtils.showError('出错了！请检查网络状态！');
		        	}
                }
			});
		},
		//ajax异步请求,json数据返回值
		CallService: function(options){
			//请求参数定义
			var opts={
					async : true,//默认异步请求,同步 false
					url: "",
					params:null,
					method: "post",
					headers: null,
					call: Ext.emptyFn,
					dataType: "text",
					before: Ext.emptyFn,//请求前执行事件执行成功返回true，不成功返回false，必须返回对象
					after: Ext.emptyFn//请求完成后执行函数,注入调用后的参数response
			}
			//请求
			Ext.apply(opts,options);
			//alert(opts.async);
			//请求前事件
			Ext.Ajax.addListener("beforerequest",function(conn,options,eopts){
				if(Ext.isFunction(opts.before) && opts.before != Ext.emptyFn){
					return Ext.callback(opts.before,this);
				}else{
					AjaxUtils.showProgress();
				}
			});
			//请求完成后事件
			Ext.Ajax.addListener("requestcomplete",function(conn,response,options,eopts){
				if(Ext.isFunction(opts.after) && opts.after != Ext.emptyFn){
					Ext.callback(opts.after,this,[response]);
				}else{
					AjaxUtils.closeProgress();
				}
			});
			var ajaxParam = {
					async : opts.async,
					url: opts.url,
	                headers: opts.headers,
	                //params: opts.params,
	                //jsonData: opts.params,
	                method: opts.method,
	                success: function (response, options) {
	                	var data = Ext.decode(response.responseText);
	                	if(data.status == "SESSION_TIMEOUT"){
	                		top.AjaxUtils.showError('系统登陆超时，请重新登陆',function(){
	                			window.parent.location.href = CONTEXT.contextPath+"/login";
	                		});
	                		return;
	                	}
	                	if(Ext.isFunction(opts.call)){
							Ext.callback(opts.call,this,[data]);
	                    }

	                },
	                failure: function (response, options) {
	                	//AjaxUtils.showError('执行失败 ,错误编号：' + response.status);
	                	if(response == null){
	                		AjaxUtils.showError('出错了！请检查网络状态！');
			        	}else if(response.status == 0){
			        		AjaxUtils.showError('出错了！请求服务器无响应！');
			        	}else if(response.status == 404){
			        		AjaxUtils.showError('出错了！请求地址不存在！');
			        	}else if(response.status == 500){
			        		AjaxUtils.showError('出错了！请求数据异常！');
			        	}else{
			        		AjaxUtils.showError('出错了！请检查网络状态！');
			        	}
	                }
				};
				if(opts.dataType == "json"){
					//json格式提交
					ajaxParam.jsonData = opts.params;
				}else if(opts.dataType == "xml"){
					//xml格式提交
					ajaxParam.xmlData = opts.params;
				}else{
					//普通提交
					ajaxParam.params = opts.params;
				}
			Ext.Ajax.request(ajaxParam);
		},
		/**
		 * Ajax附件上传窗体
		 * call:回调函数，注入result参数,uploadWin 上传文件窗体
		 */
		CallFileUploadService: function(call){
			Ext.create('Ext.com.bkfm.window', {
				id: "fileUploadWin",
				title: "附件上传",
				autoScroll : true,
				modal : true,
				width: Utils.getWidth()*0.5,
				height: Utils.getHeight()*0.4,
				bodyStyle:'padding:10px 10px 10px 10px',
				html: '<form id="uploadForm" name="uploadForm"><div id="uploadfile_div"></div></form>',
				listeners:{
					show: function(self,eopts){
						var file = new Ext.form.field.File({
							id:"uploadfile",
							name: "uploadfile",
							fieldLabel: '请选择需要上传的文件',
		                    labelWidth: 150,
		                    msgTarget: 'side',
		                    allowBlank: false,
		                    width: Utils.getWidth()*0.5-100,
		                    buttonText: '选择文件',
		                    emptyText : "上传文件不可为空",
		                    invalidText: "上传文件不可为空",
		                    renderTo: "uploadfile_div"
						});
					}
				},
                tbar:[{
                	text: "上传",
                	iconCls: "attachment_upload",
                	handler: function(){
                		var uploadfile = Ext.getCmp("uploadfile");
                        if(uploadfile.isValid()){
                        	Ext.Ajax.request({
            					url : CONTEXT.contextPath+'/bkfm/common/v1/upload',
            					isUpload : true,
            					form : "uploadForm",
            					success: function (response, options) {
            	                	var data = Ext.decode(response.responseText);
            	                	var fileUploadWin = Ext.getCmp("fileUploadWin");
            	                	if(data.status == "SESSION_TIMEOUT"){
            	                		top.AjaxUtils.showError('系统登陆超时，请重新登陆',function(){
            	                			window.parent.location.href = CONTEXT.contextPath+"/login";
            	                		});
            	                		return;
            	                	}
            	                	if(Ext.isFunction(call)){
            							Ext.callback(call,this,[data,fileUploadWin]);
            	                    }
            	                },
            	                failure: function (response, options) {
            	                	if(response == null){
            	                		AjaxUtils.showError('出错了！请检查网络状态！');
            			        	}else if(response.status == 0){
            			        		AjaxUtils.showError('出错了！请求服务器无响应！');
            			        	}else if(response.status == 404){
            			        		AjaxUtils.showError('出错了！请求地址不存在！');
            			        	}else if(response.status == 500){
            			        		AjaxUtils.showError('出错了！请求数据异常！');
            			        	}else{
            			        		AjaxUtils.showError('出错了！请检查网络状态！');
            			        	}
            	                }
                        	});
                        }
                	}
                }]
			}).show();
		}
}